/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.ipti.br.tag.util;

import java.text.Normalizer;
import javax.faces.application.FacesMessage;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author luancorumba
 */
public class ServiceUtil {

    public static final String FIELD_BLANK = "";

    /**
     * Campo em Branco (Inteiro)
     */
    public static final int FIELD_BLANK_INTEGER = Integer.MAX_VALUE;

    /**
     * Campo em Branco (Booleano)
     */
    public static final boolean FIELD_BLANK_BOOLEAN = false;

    /**
     * Permite obter o contexto atual de Java Server Faces
     * @return Contexto de Java Server Faces
     */
    public static FacesContext getFacesContext() {
        return FacesContext.getCurrentInstance();
    }

    /**
     * Método para obter o indicador se foi feito uma ação HTTP POST na página ou não
     * @return Indicador se foi feito postback ou não
     */
    public static boolean isPostBack(){
        return getFacesContext().isPostback();
    }

    /**
     * Método que permite obter o contexto externo à aplicação JSF
     * @return Retorno contexto externo a aplicação JSF
     */
    public static ExternalContext getExternalContext() {
        return getFacesContext().getExternalContext();
    }

    /**
     * Método para obter referência de uma requisição
     * @return Retorna a referência de uma requisição
     */
    public static HttpServletRequest getRequest() {
        return (HttpServletRequest)getExternalContext().getRequest();
    }

    /**
     * Método para obter referência de uma reposta
     * @return Retorna a referência de uma resposta
     */
    public static HttpServletResponse getResponse() {
        return (HttpServletResponse)getExternalContext().getResponse();
    }

    /**
     * Método para obter sessão do usuário
     * @return Referência de sessão
     */
    public static HttpSession getSession() {
        return getRequest().getSession();
    }
    
    public static HttpSession getSession(boolean b) {
        return (HttpSession) getFacesContext().getExternalContext().getSession(b);
    }

    public static void saveAttributeInSession(String name, String valor) {
        getSession(true).setAttribute(name, valor);
    }

    public static Object getAttributeFromSession(String name) {
        return getSession(false).getAttribute(name);
    }

    public static void removeAttributeFromSession(String name) {
        getSession(false).removeAttribute(name);
    }

    public static void redirect(String url) {
        try {
            getFacesContext().getExternalContext().redirect(url);
        } catch (Exception e) {
        }
    }

    public static Object getParameterFromURL(String param){
        return getFacesContext().getExternalContext().getRequestParameterMap().get(param);
    }
    
    public static void addInfoMessage(String msg, String detalhe){
        getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, msg, detalhe));
    }
    
    public static void addErroMessage(String msg, String detalhe){
        getFacesContext().addMessage(null, new FacesMessage(FacesMessage.SEVERITY_ERROR, msg, detalhe));
    }
    
    public static String getRealPath(String path){
        return getSession().getServletContext().getRealPath(path);
    }
    
    public static String getIpAcesso(){
        return getRequest().getRemoteAddr();
    }
    
    public static String removerAcento(String string) {
        string = Normalizer.normalize(string, Normalizer.Form.NFD);  
        string = string.replaceAll("[^\\p{ASCII}]", "");
        return string;
    }
}